package View;


import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.awt.event.MouseListener;
import java.awt.BorderLayout;
import java.io.FileNotFoundException;

import javax.swing.*;
import javax.swing.event.CaretListener;

import Model.Contact;
import Model.FichierManager;


public class addressBookView extends JFrame{
	/**
	 * Vue principal
	 * 
	 */
	
	private static final long serialVersionUID = 1L;
	
	private static FichierManager carnet = new FichierManager("fichier.txt");

	//JPANEL
	private JPanel JPcontener = new JPanel(new GridLayout(1, 3));
	private JPanel JPsearch = new JPanel(); //1er panel
	private JPanel JPListContacts = new JPanel();// 2eme panel
	private JPanel JPInfoContact = new JPanel();// 3eme panel
	private JPanel JPtoutInfo=new JPanel(); // dans infoContact
	//JBUTTON
	private JButton boutonSearch = new JButton("Rech");
	private JButton boutonModifier = new JButton("Modifier contact");
	private JButton boutonAjouter = new JButton("Ajouter contact");
	private JButton boutonSupprimer=new JButton("Supprimer");
	//JLABEL
	private JLabel JLinfo = new JLabel("               Info contact");
	private JLabel JLlist = new JLabel("Liste des contacts");
	private JLabel JLgroupe = new JLabel("Vos groupes");
	// GERER JLIST DE CONTACT
	private static List<Contact> contacts;
	private static DefaultListModel model;
	private static JList jlist;
	
	//GERER JLIST DE GROUPE
	private static List<Contact> famille= new ArrayList<Contact>();
	private static List<Contact> amis= new ArrayList<Contact>();
	private static List<Contact> travail= new ArrayList<Contact>();
	
	// GERER JLIST DE GROUPE
	private static DefaultListModel modelGrp;
	private static JList jlistGrp;

	//RECHERCHER
	private JTextField jtShearch = new JTextField("Nom Prenom");
	
	public addressBookView(){
		
		model = new DefaultListModel();
		contacts = new ArrayList<Contact>();
		jlist = new JList(model);
		
		
		modelGrp=new DefaultListModel();
		jlistGrp=new JList(modelGrp);
		
		remplirJlist();
		remplirJlist2();
		remplirArrayList();
		
		Font police = new Font("Arial", Font.BOLD, 14);
		JLinfo.setFont(police);
		JLlist.setFont(police);
		JLgroupe.setFont(police);
		
		JPsearch.add(JLgroupe);
		JPsearch.add(jlistGrp);
		jlistGrp.setFixedCellWidth(150);
		jlistGrp.setVisibleRowCount(10);
		JScrollPane scrollPane2 = new JScrollPane(jlistGrp);
		JPsearch.add(scrollPane2);
		JPsearch.add(jtShearch);
		JPsearch.add(boutonSearch);
		JPsearch.add(boutonAjouter);
		
		JPListContacts.add(JLlist);
		JPListContacts.add(jlist);
		jlist.setFixedCellWidth(150);
		jlist.setVisibleRowCount(15);
		JScrollPane scrollPane = new JScrollPane(jlist);
		JPListContacts.add(scrollPane);
		JPListContacts.add(boutonSupprimer);
		
		JPInfoContact.setLayout(new BorderLayout());
		JPInfoContact.add(JLinfo,BorderLayout.NORTH);
		JPInfoContact.add(JPtoutInfo,BorderLayout.CENTER);
		JPInfoContact.add(boutonModifier,BorderLayout.SOUTH);
		
		
		
		this.setTitle("Carnet d'Adresse");
		this.setSize(630, 350);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setContentPane(JPcontener);
		this.getContentPane().add(JPsearch);
		this.getContentPane().add(JPListContacts);
		this.getContentPane().add(JPInfoContact);
		this.setVisible(true);
	}
	
	// GETTER AND SETTER
	public FichierManager getCarnet() {
		return carnet;
	}

	public void setCarnet(FichierManager carnet) {
		this.carnet = carnet;
	}
	
	public String getJtf1(){
		return jtShearch.getText();
	}	
	
	public static JList getJlist() {
		return jlist;
	}

	public static void setJlist(JList jlist) {
		addressBookView.jlist = jlist;
	}
	
	public static JList getJlistGrp() {
		return jlistGrp;
	}
	/**
	 * @param listenForBoutonAjouter
	 * Si je clique sur mon boutton ajouter, la methode actionPerformed 
	 * dans le controlleur est executé
	 */
	//if the calculateButton is clicked execute a methode
	//in the controller named actionPerformed
			
		public void ouvrirFenetreListener(ActionListener listenForBoutonAjouter){
			boutonAjouter.addActionListener(listenForBoutonAjouter);
			//System.out.println("classe: addressBookView, methode:ouvrirFenetreListener");
			
		}
			
		public void supprimerContactListener(ActionListener listenForSuppButton){
				boutonSupprimer.addActionListener(listenForSuppButton);
				//System.out.println("classe: addressBookView, methode:supprimerContactListener");
		}
		
		public void afficherInfoContactListener(MouseListener ok){
			jlist.addMouseListener(ok);
			
		}
		
		public void afficherGroupeContactListener(MouseListener ok){
			jlistGrp.addMouseListener(ok);
			//System.out.println("classe: addressBookView, methode:afficherInfoContactListener");
		}

		public void shearchContactListener(ActionListener b){
			boutonSearch.addActionListener(b);
			//System.out.println("classe: addressBookView, methode:shearchContactListener");
		}
		public void modifierContactListener(ActionListener c){
			boutonModifier.addActionListener(c);
			//System.out.println("classe: addressBookView, methode:modifierContactListener");
		}
		

		//FONCTION ANEX	 
		/**
		 * met à jours toute les arrayList : tout, famille, amis, travail
		 */
		public static void remplirArrayList(){
			contacts.clear();
			famille.clear();
			amis.clear();
			travail.clear();
			try {
				contacts = carnet.recupererContact();
			} catch (FileNotFoundException e1) {
				javax.swing.JOptionPane.showMessageDialog(null, e1.getMessage());
			}
			
			for (int i=0 ; i<contacts.size() ; i++){	
				if(contacts.get(i).getGroupe().equals("Famille"))
					famille.add(contacts.get(i));
				if(contacts.get(i).getGroupe().equals("Amis"))
					amis.add(contacts.get(i));
				if(contacts.get(i).getGroupe().equals("Travail"))
					travail.add(contacts.get(i));
			}
		}
		
		public static void remplirJlist(){
			contacts.clear();
			jlist.removeAll();
			model.clear();
			
			
			try {
				contacts = carnet.recupererContact();
			} catch (FileNotFoundException e1) {
				javax.swing.JOptionPane.showMessageDialog(null, e1.getMessage());
			}
			Collections.sort(contacts);
			for (int i=0 ; i<contacts.size() ; i++){	
				model.addElement(contacts.get(i).getLastName() + " "+ contacts.get(i).getFirstName());
			}
			
		}
		
		public static void remplirJlistFamille(){
			jlist.removeAll();
			model.clear();			
			Collections.sort(famille);
			for (int i=0 ; i<famille.size() ; i++){	
				model.addElement(famille.get(i).getLastName() + " "+ famille.get(i).getFirstName());
			}

		}
		public static void remplirJlistAmis(){
			jlist.removeAll();
			model.clear();			
			Collections.sort(amis);
			for (int i=0 ; i<amis.size() ; i++){	
				model.addElement(amis.get(i).getLastName() + " "+ amis.get(i).getFirstName());
			}

		}
		public static void remplirJlistTravail(){
			jlist.removeAll();
			model.clear();			
			Collections.sort(travail);
			for (int i=0 ; i<travail.size() ; i++){	
				model.addElement(travail.get(i).getLastName() + " "+ travail.get(i).getFirstName());
			}

		}
		
		public static void remplirJlist2(){
			String[] choixGrp={"Tout","Famille","Amis","Travail"};
			for (int i=0 ; i<choixGrp.length ; i++){
				modelGrp.addElement(choixGrp[i]);
			}
		}
		/**
		 * Affiche les info du contact sur la troizieme panel
		 * lorsqu'on appuie sur un contact sur la Jlist
		 */
		
		public void afficherInfoContact(){
			JLabel nom=null;
			JPtoutInfo.removeAll();
			Contact cont_test = new Contact("", "", "", "", "", "", "","");
			FichierManager m=new FichierManager();
			cont_test = m.rechercherContact(jlist.getSelectedValue().toString());
			if (cont_test!=null){
				nom = new JLabel("<html><br><strong> Nom : </strong>" + cont_test.getLastName()
						+ "<br><br><strong> Prenom : </strong>" + cont_test.getFirstName()
						+ "<br><br><strong> Adresse 1 : </strong>" + cont_test.getHmAdd()
						+ "<br><br><strong> Adresse 2 : </strong>" + cont_test.getCmpAdd()
						+ "<br><br><strong> Numero 1 : </strong>" + cont_test.getPhone()
						+ "<br><br><strong> Numero 2 : </strong>" + cont_test.getProfPhone()
						+ "<br><br><strong> Mail : </strong>" + cont_test.getMail()
						+ "<br><br><strong> Groupe : </strong>" + cont_test.getGroupe() + "</br></html>");
				JPtoutInfo.add(nom);
				JPtoutInfo.validate();
				JPtoutInfo.setVisible(true);
				}else {
					nom = new JLabel("");
					javax.swing.JOptionPane.showMessageDialog(null, "Contacte inexistant.");
					JPsearch.add(nom);
					this.setVisible(true);
				}
		}
		
		public void viderDernPanel(){
			JPtoutInfo.removeAll();
		}
		/**
		 * 
		 * @param nomPrenom
		 * affiche les info du contact sur la 3ieme panel
		 * lorsque je recherche le nom et prenom du contact
		 */
		public void afficherInfoContactRecherche(String nomPrenom){
			JLabel nom=null;
			JPtoutInfo.removeAll();
			Contact cont_test = new Contact("", "", "", "", "", "", "","");
			FichierManager m=new FichierManager();
			cont_test = m.rechercherContact(nomPrenom);
			if (cont_test!=null){
				nom = new JLabel("<html><br><strong> Nom : </strong>" + cont_test.getLastName()
						+ "<br><br><strong> Prenom : </strong>" + cont_test.getFirstName()
						+ "<br><br><strong> Adresse 1 : </strong>" + cont_test.getHmAdd()
						+ "<br><br><strong> Adresse 2 : </strong>" + cont_test.getCmpAdd()
						+ "<br><br><strong> Numero 1 : </strong>" + cont_test.getPhone()
						+ "<br><br><strong> Numero 2 : </strong>" + cont_test.getProfPhone()
						+ "<br><br><strong> Mail : </strong>" + cont_test.getMail()
						+ "<br><br><strong> Groupe : </strong>" + cont_test.getGroupe() + "</br></html>");;
				JPtoutInfo.add(nom);
				JPtoutInfo.validate();
				JPtoutInfo.setVisible(true);
				}else {
					nom = new JLabel("");
					javax.swing.JOptionPane.showMessageDialog(null, "Contacte inexistant.");
					JPsearch.add(nom);
					this.setVisible(true);
				}
		}

	
}